home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / xlisp_21.zoo / xl-006.bug < prev    next >
Internet Message Format  |  1990-02-28  |  3KB

  1. From sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma Thu Dec  7 08:52:22 EST 1989
  2. Article: 42 of comp.lang.lisp.x
  3. Path: cognos!sce!mitel!uunet!zephyr.ens.tek.com!tekcrl!tekgvs!toma
  4. From: toma@tekgvs.LABS.TEK.COM (Tom Almy)
  5. Newsgroups: comp.lang.lisp.x
  6. Subject: More XLISP Bugs
  7. Message-ID: <6460@tekgvs.LABS.TEK.COM>
  8. Date: 4 Dec 89 18:18:34 GMT
  9. Reply-To: toma@tekgvs.LABS.TEK.COM (Tom Almy)
  10. Organization: Tektronix, Inc., Beaverton,  OR.
  11. Lines: 110
  12.  
  13.  
  14.                                 12/4/89
  15.  
  16. I was trying some examples in Common Lisp: The Reference, and found some
  17. bugs (both real and compatibility) in XLISP 2.0/2.1
  18.  
  19. ********************
  20.  
  21. Double quotes are not escaped when printing.
  22. (Fix needed in putqstring to handle case of '"').
  23.  
  24. change:
  25.     if (ch < 040 || ch == '\\' || ch > 0176) {
  26. to:
  27.     if (ch < 040 || ch == '\\' || ch == '"' || ch > 0176) {
  28.  
  29. change:
  30.     case '\\':
  31.     xlputc(fptr,'\\');
  32.     break;
  33.  
  34. to:
  35.     case '\\':
  36.     case '"':
  37.     xlputc(fptr,ch);
  38.     break;
  39.  
  40. ******************
  41. In version 2.1, #S() construct doesn't quote element values. 
  42. ":" not allowed on keywords, nor are the printed.
  43.  
  44. Example:
  45.  
  46. (defstruct foo (x 10))
  47.  
  48.  
  49. #S(foo)   prints #S(foo x 10) instead of #S(foo :x 10)
  50.  
  51. #S(foo :x 10)  gives an error
  52.  
  53. #S(foo x (+ 3 4)) gives #S(foo x 7) instead of #S(foo :x (+3 4))
  54.  
  55. In xlrdstruct() (xlstruct.c)
  56.  
  57. change:
  58.     sprintf(buf,":%s",getstring(getpname(slotname)));
  59.  
  60.     /* add the slot keyword */
  61.     rplacd(last,cons(xlenter(buf),NIL));
  62.  
  63. to:
  64.  
  65.  
  66.     /* add the slot keyword */
  67.     if (*(getstring(getpname(slotname))) != ':') { /* add colon */
  68.         sprintf(buf,":%s",getstring(getpname(slotname)));
  69.         rplacd(last,cons(xlenter(buf),NIL));
  70.     }
  71.     else {
  72.         rplacd(last,cons(slotname,NIL));
  73.     }
  74.  
  75. and change:
  76.     /* add the value expression */
  77.     rplacd(last,cons(car(list),NIL));
  78.     last = cdr(last);
  79.     list = cdr(list);
  80.  
  81. to:
  82.     /* add the value expression  -- QUOTED (TAA MOD) */
  83.     rplacd(last,cons(NIL,NIL));
  84.     last = cdr(last);
  85.     rplaca(last, (slotname = cons(s_quote,NIL)));
  86.     rplacd(slotname, cons(car(list), NIL));
  87.     list = cdr(list);
  88.  
  89.  
  90.  
  91. In xlprstruct(), replace:
  92.     xlputc(fptr,' ');
  93.  
  94. with:
  95.     xlputstr(fptr," :");    /* TAA MOD, colons should show */
  96.  
  97. ****************
  98. In XLISP 2.1, attempts to write to a structure element beyond the end of
  99. the structure (i.e. wrong access function used) tends to cause a crash.
  100.  
  101. FIX: in both xstrref() and xstrset() (in xlstruct.c) 
  102.  
  103. after:
  104.     xllastarg(); 
  105.  
  106. add:
  107.     if (i >= getsize(str)) /* wrong structure*/
  108.     xlerror("Bad structure reference",str);
  109.  
  110.  
  111. *********************
  112. I added #. macro, to eval at read time.    
  113. To switch statement in rmhash add:
  114.  
  115.     case '.':
  116.         readone(fptr,&car(val));
  117.         rplaca(val,xleval(car(val)));
  118.         break;
  119.  
  120. Tom Almy
  121. toma@tekgvs.labs.tek.com
  122. Standard Disclaimers Apply
  123.  
  124.  
  125.